var idComercioBuscado;

$(document).ready(function () {

    // Cargamos en el selector todos los id de comercios que tengamos en la base de datos
    cargarSelectorComercios();
    // Ocultamos la tabla
    $('#tabla_historico_comercios').hide();
    oyentesBotonesTabla();

  /* ------------------
    |  TABLA HISTÓRICO |
     ------------------ */

    $('#tabla_historico_comercios').jtable({
        title: 'Historial de operaciones',
        addRecordButton: false,
        openChildAsAccordion: true,
        sorting: true,
        defaultSorting: 'fechaHora DESC',
        actions: {
            listAction: function (postData, jtParams) {
                return $.Deferred(function ($dfd) {
                    $.ajax({
                        url: '../../php/comercios/operacionesTablaComercios.php',
                        type: 'POST',
                        dataType: 'json',
                        data: crearPeticionJsonHistoricoComercio(jtParams.jtSorting, postData),
                        success: function (data) {
                            $dfd.resolve(data);
                        },
                        error: function (data) {
                            console.log(data);
                            $dfd.reject();
                        }
                    });
                });
            }
        },
        fields: {
            detallesCabecera:{
                title: '',
                width: '1%',
                sorting: false,
                edit: false,
                create: false,
                display: function (datosOperacion) {
                    // Imagen de la columna
                    var $img;
                    if(datosOperacion.record.tipoOperacionCabecera =='DEVOLUCION') {
                        $img = $('<div align="center" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Esta operación contiene devoluciones"><i class="fa fa-plus-square text-lg red"></i></div>');
                        $img.tooltip();
                    }else{
                        $img = $('<div align="center"><i class="fa fa-plus-square text-lg"></i></div>');
                    }
                    // Abre el hijo cuando pinchamos en la imagen
                    $img.click(function () {
                        $('#tabla_historico_comercios').jtable('openChildTable',
                                $img.closest('tr'),
                                {
                                    title: 'Detalles de operación la operación',
                                    actions: {
                                        listAction: function (postData, jtParams) {
                                            return $.Deferred(function ($dfd) {
                                                $.ajax({
                                                    url: '../../php/comercios/operacionesTablaComercios.php',
                                                    type: 'POST',
                                                    dataType: 'json',
                                                    data: crearPeticionJsonInformesDetallesOperacion(postData, datosOperacion.record.idCabecera, datosOperacion.record.idOperacion ,'fechaHora ASC'),
                                                    success: function (data) {
                                                        $dfd.resolve(data);
                                                    },
                                                    error: function (data) {
                                                        console.log(data);
                                                        $dfd.reject();
                                                    }
                                                });
                                            });
                                        }
                                    },
                                    fields: {
                                        descripcion: {
                                            title: 'Descripción',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                        },
                                        tipoOperacion: {
                                            title: 'Operación',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                if(datosOperacion.record.tipoOperacion == 'VENTA') {
                                                    return $('<span class="label label-success">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VENTA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>');
                                                }else{
                                                    return $('<span class="label label-danger">DEVOLUCIÓN</span>');
                                                }
                                            }
                                        },
                                        unidades: {
                                            title: 'Unidades',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                if(datosOperacion.record.tipoOperacion == 'VENTA') {
                                                    return datosOperacion.record.unidades;
                                                }else{
                                                    return -datosOperacion.record.unidades;
                                                }
                                            }
                                        },
                                        precioUnidad: {
                                            title: 'Precio unidad',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                return parseFloat(datosOperacion.record.precioUnidad).toFixed(2).replace(".", ",") + " €";
                                            }
                                        },
                                        iva: {
                                            title: 'IVA',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                return parseFloat(datosOperacion.record.iva).toFixed(2).replace(".", ",") + " €";
                                            }
                                        },
                                        ivaTotal: {
                                            title: 'IVA total',
                                            listClass: 'campoCentrado',
                                            sorting: false,
                                            display: function (datosOperacion) {
                                                if(datosOperacion.record.tipoOperacion == 'VENTA') {
                                                    return parseFloat(datosOperacion.record.ivaTotal).toFixed(2).replace(".", ",") + " €";
                                                }else{
                                                    return parseFloat(-datosOperacion.record.ivaTotal).toFixed(2).replace(".", ",") + " €";
                                                }
                                            }
                                        },
                                        importeTotal: {
                                            title: 'Importe total',
                                            listClass: 'campoCentrado',
                                            sorting:false,
                                            display: function (datosOperacion) {
                                                var resultado = parseFloat(datosOperacion.record.importeTotal) + parseFloat(datosOperacion.record.ivaTotal);
                                                if(datosOperacion.record.tipoOperacion == 'DEVOLUCION') {
                                                    return $('<span class="text-red">' + parseFloat(resultado).toFixed(2).replace(".", ",") + ' €</span>');
                                                }else{
                                                    return parseFloat(resultado).toFixed(2).replace(".", ",") + " €";
                                                }
                                            }
                                        },
                                        fechaHora: {
                                            title: 'Fecha operación',
                                            listClass: 'campoCentrado',
                                            width: '10%',
                                            sorting: false
                                        }
                                    }
                                }, function (data) { //opened handler
                                    data.childTable.jtable('load', { filtroConsulta: idComercioBuscado});
                                });
                    });
                    //Return image to show on the person row
                    return $img;
                }
            },
            idCabecera: {
                title: 'ID Operación',
                listClass: 'campoCentrado',
                width: '15%',
                key: true,
                type: 'number',
                sorting: false,
            },
            tipoOperacionCabecera: {
                title: 'Operación',
                listClass: 'campoCentrado',
                sorting: false,
                width: '10%',
                display: function (datosOperacion) {
                    if(datosOperacion.record.tipoOperacionCabecera == 'VENTA') {
                        return $('<span class="label label-success">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VENTA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>');
                    }else{
                        return $('<span class="label label-danger">DEVOLUCIÓN</span>');
                    }
                }
            },
            fechaHora: {
                title: 'Fecha operación',
                listClass: 'campoCentrado',
                width: '15%',
            },
            numeroProductos: {
                title: 'Nº Productos',
                listClass: 'campoCentrado',
                width: '10%',
                type:'number',
                sorting: false,
                display: function (datosOperacion) {
                    if(datosOperacion.record.tipoOperacionCabecera == 'VENTA') {
                        return datosOperacion.record.numeroProductos;
                    }else{
                        return -datosOperacion.record.numeroProductos;
                    }
                }
            },
            formaPago: {
                title: 'Modalidad',
                listClass: 'campoCentrado',
                width: '10%',
                sorting: false,
                display: function (datosOperacion){

                    if(datosOperacion.record.formaPago == 'Efectivo') {
                        return $('<span class="label label-primary">&nbsp;&nbsp;' + datosOperacion.record.formaPago + '&nbsp;&nbsp;</span>');
                    }else{
                        var $imgFactura = $('<span id="' + datosOperacion.record.idCabecera +"-" + datosOperacion.record.idOperacion +'" class="label label-default" data-toggle="modal" data-target="#modal_imagen_factura_informes_historico" style="cursor:pointer;">' + datosOperacion.record.formaPago + ' <i class="icon-lg fa fa-camera"></i></span>');
                        $imgFactura.click(onClickImagenFactura);
                        return $imgFactura;
                    }
                }
            },
            idTicket: {
                title: 'Ticket',
                listClass: 'campoCentrado',
                width: '10%',
                sorting: false,
                display: function (datosOperacion){
                    var $imgTicket = $('<span id="' + datosOperacion.record.idCabecera + "-" + datosOperacion.record.idOperacion + '" class="label label-default" data-toggle="modal" data-target="#modal_ticket" style="cursor:pointer;">' + añadirCeros(datosOperacion.record.idTicket, 7) + '-'+ datosOperacion.record.numTerminal + '</span>');
                        $imgTicket.click(onClickTicketOperacion);
                        return $imgTicket;
                }
            },
            importeTotal: {
                title: 'Importe total',
                listClass: 'campoCentrado',
                sorting:false,
                width: '15%',
                display: function (datosOperacion) {
                    if(datosOperacion.record.tipoOperacionCabecera == 'DEVOLUCION') {
                        return $('<span class="text-red">' + parseFloat(datosOperacion.record.importeTotal).toFixed(2).replace(".", ",") + ' €</span>');
                    }else{
                        return parseFloat(datosOperacion.record.importeTotal).toFixed(2).replace(".", ",") + " €";                                            }
                }
            }
        }
    });

    $('#imprimir-ticket').click(function(event) {
        var tab = window.open("","#modal_ticket .modal-body");

        var divContents = $("#modal_ticket .modal-body").html();
        var printWindow = window.open('', '', 'height=600,width=800');
        printWindow.document.write('<html><head><title></title>');
        printWindow.document.write('<link href="assets/stylesheets/bootstrap.min.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/pixel-admin.min.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/widgets.min.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/pages.min.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/rtl.min.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/miCSS/miCss_ticket.css" rel="stylesheet" type="text/css">' +
            '<link href="../assets/stylesheets/themes.min.css" rel="stylesheet" type="text/css">');
        printWindow.document.write('</head><body class="page-invoice">');
        printWindow.document.write(divContents);
        printWindow.document.close();
        printWindow.print();
    });

});

// Método encargado de relaizar el post para que se envien el id de todos los comercios
function cargarSelectorComercios(){
    enviarPeticionListarIdTodosComercios();
}

function enviarPeticionListarIdTodosComercios(){
    datosEnvioPeticionIdTodosComercios = {};
    datosEnvioPeticionIdTodosComercios.accion = 'listarIdTodosComercios';
    datosEnvioPeticionIdTodosComercios.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionIdTodosComercios.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionIdTodosComercios)}, callbackPeticionIdTodosComerciosExito).fail(failPostPeticionIdTodosComercios);
}

function callbackPeticionIdTodosComerciosExito(resultado){
    var idTodosComercios = JSON.parse(resultado)['idTodosComercios'];
    var selector = '';

    i = 0;
    // Recorremos todos los id de comercios y vamos creando la carga del selector
    while (i<idTodosComercios.length){
        selector += '<option value="' + idTodosComercios[i]['idComercio'] + '">' + idTodosComercios[i]['idComercio'] +'</option>';
        i++;
    }

    // Cargamos el selector
    $('#selector_comercios').empty();
    $('#selector_comercios').append(selector);
}

function failPostPeticionIdTodosComercios(data){
    $.growl.notice({ title:"Fallo al cargar", message: "Se ha producido un fallo al cargar el identificador de los comercios. Inténtelo de nuevo más tarde." });
    console.log(data);
}

  /* -------------------------
    |  OYENTES BOTONES TABLA  |
     ------------------------- */

function oyentesBotonesTabla() {

    $('#mostrar_tabla_historico').click(function(event) {
        $('#tabla_historico_comercios').show();
        idComercioBuscado = $('#selector_comercios').val();
        $('#tabla_historico_comercios').jtable('load',{ filtroConsulta: idComercioBuscado});
    });

    $('#selector_comercios').click(function(event) {
        $('#tabla_historico_comercios').hide();
    });
}

  /* -------------
    |  HISTÓRICO  |
     ------------- */

function crearPeticionJsonHistoricoComercio(ordenacion, idComercio){
    informacionJson = {};
    datosPeticionHistorico = {};
    datosPeticionHistorico.accion = 'listarHistorico';
    datosPeticionHistorico.tipoFormulario = 'tabla_comercios_historico';
    datosPeticionHistorico.tokenCSRF = $('#comercios_historico_comercios_tabla_token_CSRF').val();
    datosPeticionHistorico.ordenacion = ordenacion;
    datosPeticionHistorico.idComercio = idComercio.filtroConsulta;
    informacionJson.datosPostComercios = datosPeticionHistorico;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

function crearPeticionJsonInformesDetallesOperacion(idComercio, idCabecera, idOperacion, ordenacion){
    informacionJson = {};
    datosPeticionHistorico = {};
    datosPeticionHistorico.accion = 'listarDetalleOperacion';
    datosPeticionHistorico.idComercio = idComercio.filtroConsulta;
    datosPeticionHistorico.idCabecera = idCabecera;
    datosPeticionHistorico.idOperacion = idOperacion;
    datosPeticionHistorico.tipoFormulario = 'tabla_comercios_historico';
    datosPeticionHistorico.tokenCSRF = $('#comercios_historico_comercios_tabla_token_CSRF').val();
    datosPeticionHistorico.ordenacion = ordenacion;
    informacionJson.datosPostComercios = datosPeticionHistorico;
    informacionJson.peticionAjax = 'SI';
    return informacionJson;
}

function onClickImagenFactura(){
    // Obtenemos el idCabecera del name del icono
    var ids = $(this).attr('id').split('-');
    // Enviamos Post al Servidor
    var idCabecera = ids[0];
    var idOperacion = ids[1];
    enviarPeticionImagenFactura(idCabecera, idOperacion);
}

function enviarPeticionImagenFactura(idCabecera, idOperacion){
    datosEnvioPeticionImgFactura = {};
    // Datos de Contacto
    datosEnvioPeticionImgFactura.idComercio = idComercioBuscado;
    datosEnvioPeticionImgFactura.idCabecera = idCabecera;
    datosEnvioPeticionImgFactura.idOperacion = idOperacion;
    datosEnvioPeticionImgFactura.accion = 'descargarFactura';
    datosEnvioPeticionImgFactura.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionImgFactura.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    // JSON.stringfy(obj) transforma un objeto a una cadena de texto
    // JSON.parse(cadena) transforma una cadena en un objeto
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionImgFactura)}, callbackPeticionImagenFacturaExito).fail(failPostPeticionImagenFactura);
}

function callbackPeticionImagenFacturaExito(data){
    console.log('entra');
    console.log(data);
    respuestaServidor = JSON.parse(data);
    // Cargamos la imagen en el modal
    factura = $('<img src="data:image/png;base64,' + respuestaServidor['imagenFacturaTarjeta'] + '" alt="Factura" width="100%">');
    $('#modal_imagen_factura_informes_historico .btn-success').attr('href', 'data:image/png;base64,' + respuestaServidor['imagenFacturaTarjeta'] );
    $('#modal_imagen_factura_informes_historico .modal-body').empty();
    $('#modal_imagen_factura_informes_historico .modal-body').append(factura);
}

function failPostPeticionImagenFactura(data){
    $('#modal_imagen_factura_informes_historico .modal-body').empty();
    $('#modal_imagen_factura_informes_historico .modal-body').append(data);
}


function onClickTicketOperacion(){
    // Obtenemos el idCabecera del name del icono
    var ids = $(this).attr('id').split('-');
    // Enviamos Post al Servidor
    var idCabecera = ids[0];
    var idOperacion = ids[1];
    enviarPeticionTicketOperacion(idCabecera, idOperacion);
}

function enviarPeticionTicketOperacion(idCabecera, idOperacion){
    datosEnvioPeticionTicketOperacion= {};

    // Datos de Contacto
    datosEnvioPeticionTicketOperacion.idComercio = idComercioBuscado;
    datosEnvioPeticionTicketOperacion.idCabecera = idCabecera;
    datosEnvioPeticionTicketOperacion.idOperacion = idOperacion;
    datosEnvioPeticionTicketOperacion.accion = 'descargarTicket';
    datosEnvioPeticionTicketOperacion.tipoFormulario = 'tabla_comercios';
    datosEnvioPeticionTicketOperacion.tokenCSRF = $('#comercios_tabla_token_CSRF').val();
    // JSON.stringfy(obj) transforma un objeto a una cadena de texto
    // JSON.parse(cadena) transforma una cadena en un objeto
    // Realizamos la peticion POST con el JSON de parametro
    $.post("../../php/comercios/operacionesTablaComercios.php", {datosPostComercios: JSON.stringify(datosEnvioPeticionTicketOperacion)}, callbackPeticionTicketOperacionExito).fail(failPostPeticionTicketOperacion);
}

function callbackPeticionTicketOperacionExito(data){
    respuestaServidor = JSON.parse(data);

    // Cargamos la información del ticket
    $('#razonSocial strong').text(respuestaServidor.informacion.nombreComercio);
    $('#direccion').text(respuestaServidor.informacion.direccion);
    $('#ciudad').text(respuestaServidor.informacion.ciudad);
    $('#cif').text(respuestaServidor.informacion.cif);
    $('#fechaCodOperacion').text(respuestaServidor.informacion.fechaCodOperacion);
    $('#tipoOperacionTicket').text('Tipo de operación: ' + respuestaServidor.informacion.tipoOperacion);
    $('#importeTotalTicket strong').text('TOTAL: ' + parseFloat(respuestaServidor.informacion.importeTotal).toFixed(2).replace(".", ",") + ' €');
    
    // Cargamos la información de los productos

    $('#cuerpoTabaTicket').empty();
    for (var i = 0; i < respuestaServidor.productos.Records.length; i++) {
        producto = respuestaServidor.productos.Records[i];
        crearFilaProducto(producto);
    }
}

function crearFilaProducto(producto){
    var $fila = $('<tr />').
                appendTo('#cuerpoTabaTicket');

    var $colDescripcion = $('<td />')
                .appendTo($fila);
    var $descripcion = $('<div />')
                .addClass('invoice-description')
                .text(producto.descripcion)
                .appendTo($colDescripcion);

    var $colUnidades = $('<td />')
                .appendTo($fila);
    var $unidades = $('<div />')
                .addClass('invoice-description')
                .text(producto.unidades)
                .appendTo($colUnidades);

    importeProducto = parseFloat(producto.importeTotal) + parseFloat(producto.ivaTotal);
    var $colTotal = $('<td />')
                .appendTo($fila);
    var $total = $('<div />')
                .addClass('invoice-description')
                .text(parseFloat(importeProducto).toFixed(2).replace(".", ",") + ' €')
                .appendTo($colTotal);
}

function failPostPeticionTicketOperacion(data){}

function añadirCeros(cadena, numCeros) {
  cadena = cadena.toString();
  return cadena.length < numCeros ? añadirCeros("0" + cadena, numCeros) : cadena;
}